package com.base.sort.impl;

import com.base.sort.IArraySort;

import java.util.Arrays;

public class BubbleSort implements IArraySort {

//    @Override
//    public int[] sort(int[] arr) {
//        //对原数组进行拷贝，不改变其内容
//        int[] array= Arrays.copyOf(arr,arr.length);
//        //外循环是交换次数 i从1到n-1
//        for (int i = 1; i < array.length ; i++) {
//            // 未交换标识符
//            boolean flag=true;
//            System.out.println("第"+i+"次交换");
//            //内循环是交换操作 从0到n-i
//            for (int j = 0; j < array.length - i; j++) {
//                if (array[j]>array[j+1]){
//                    int tmp=array[j];
//                    array[j]=array[j+1];
//                    array[j+1]=tmp;
//                    flag=false;
//                }
//
//            }
//            System.out.println("此次交换过程中最大值为："+array[array.length-i]);
//            if (flag){
//                break;
//            }
//
//        }
//        return array;
//    }


    @Override
    public <T extends Comparable<T>> T[] sort(T[] unsorted) {
        T[] ts = Arrays.copyOf(unsorted, unsorted.length);

        for (int i = 1; i < ts.length; i++) {
            boolean flag = true;
            for (int j = 0; j < ts.length - i; j++) {
                if (ts[j].compareTo(ts[j+1])>0){
                    T tmp = ts[j];
                    ts[j] = ts[j+1];
                    ts[j+1] = tmp;
                    flag=false;
                }
            }

            if (flag){
                break;
            }
        }

        return ts;
    }
}
